package com.ruoyi.web.controller.system;

import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.interview.service.IWxUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 短信验证码服务接口
 */
@RestController
public class SMSCodeController {

    @Autowired
    private RedisCache redisCache;
    @Autowired
    private IWxUserService wxUserService;
    /**
     * 发送短信验证码
     * @param phone
     * @return
     */
    @GetMapping("/sendCode")
    public AjaxResult SendCode(String phone){
        //1.生成一个6为由0-9数字组成的验证码
        String code = generateCode();
        //2.发送短信验证码
        // 打印验证码到控制台（用于调试）
        System.out.println("手机号 " + phone + " 的验证码是: " + code);
        //3.把验证码缓存到服务端 - redis,2分钟超时
        redisCache.setCacheObject(CacheConstants.SMS_CODE_PRE+phone,code,2, TimeUnit.MINUTES);
        //4.响应结果
        return AjaxResult.success();
    }

    @GetMapping("/bindPhone")
    public AjaxResult bindPhone(String phone,String code){
        //1.根据手机号获取后端缓存的验证码
        String cacheCode = redisCache.getCacheObject(CacheConstants.SMS_CODE_PRE + phone);
        //2.和前端发送的验证码作比较
        if (StringUtils.isEmpty(cacheCode) || !cacheCode.equals(cacheCode)){
            return AjaxResult.error("验证码错误");
        }
        //3.比对成功修改当前微信用户的手机号码
        Long userId = SecurityUtils.getLoginUser().getUserId();
        wxUserService.updatePhoneById(userId,phone);
        return AjaxResult.success();
    }

    /**
     * 生成6位数字组成的验证码
     * @return
     */
    private  String generateCode() {
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int randomNum = (int) (Math.random() * 10); // 生成0-9的随机数
            code.append(randomNum);
        }
        return code.toString();
    }
}
